import Taro from '@tarojs/taro'

//定义一个过期时间后缀常量
const dtime = '_deadtime';

function put(key: string, value: any, expire?: number) {
  //先缓存原始值
  Taro.setStorageSync(key, value);

  //过期时间大于零则附加过期时间的缓存，用于控制原始值缓存的过期
  if (expire && expire > 0) {
    const timestamp = new Date().getTime() / 1000 + expire;

    //过期时间缓存的key是: key + dtime
    Taro.setStorageSync(key + dtime, timestamp);
  } else {
    Taro.removeStorageSync(key + dtime);
  }
}

function get(key: string, defVal?: any) {
  const deadtime = Taro.getStorageSync(key + dtime) as number;

  if (deadtime) {
    //如果已过期
    if (deadtime < new Date().getTime() / 1000) {

      //有默认值返回默认值，没有默认值则移除原始缓存并返回空
      if (defVal) {
        return defVal;
      } else {
        Taro.removeStorageSync(key + dtime);
        return;
      }
    }
  }

  //没有过期则返回storage里的值，或者默认值
  const value = Taro.getStorageSync(key);
  if (value) {
    return value;
  } else {
    //有默认值返回默认值，没有默认值返回空
    if (defVal) {
      return defVal;
    } else {
      return;
    }
  }
}

//清理缓存和过期时间缓存
function remove(key: string) {
  Taro.removeStorageSync(key);
  Taro.removeStorageSync(key + dtime);
}

//清空所有缓存
function clear() {
  Taro.clearStorageSync();
}

export default {
  put,
  get,
  remove,
  clear,
}